package com.upc.cajabancos.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.driver.OracleResultSet;
import oracle.jdbc.driver.OracleTypes;

import com.upc.cajabancos.model.DetalleOrdenPago;
import com.upc.cajabancos.util.DataAccessObjetc;

public class DetalleOrdenPagoDAO {
	
private Connection connection = null;
	
	public DetalleOrdenPagoDAO(Connection connection){
		this.connection = connection;
	}
	
	public void actualizar(DetalleOrdenPago detalle) throws Exception{
		
		CallableStatement cst= null;
		
		try{
			cst= connection.prepareCall(DataAccessObjetc.buildProcedureCall("ACTUALIZAR_DETORDENPAGO",4));
			cst.setString(1, detalle.getCodigoOrdenPago());
			cst.setInt(2, detalle.getItem());
			cst.setString(3, detalle.getEstado());
			cst.setDouble(4, detalle.getMonto());
			
			cst.execute();
		}
		catch(Exception e){
			e.printStackTrace();
			throw e;
		}
		finally{
			DataAccessObjetc.close(null, cst, null);
		}
	}
	
	/**
	 * Busca detalles de orden de pago
	 * @author Cesar Jesus
	 * @since 30/01/2011
	 * @param ordenPagoId
	 * @return List<DetalleOrdenPago>
	 */	
	public List<DetalleOrdenPago> buscar(String ordenPagoId) throws Exception{
		CallableStatement cstmt = null;	
		ResultSet rs = null;
		DetalleOrdenPago detalleOrdenPago = null;
		List<DetalleOrdenPago> listaDetalleOrdenPago = new ArrayList<DetalleOrdenPago>();
    	
    	try{
			
			cstmt = connection.prepareCall(DataAccessObjetc.buildProcedureCall("LISTA_DETALLEORDENPAGO",2));
			
			cstmt.setString(1, ordenPagoId);
			cstmt.registerOutParameter(2, OracleTypes.CURSOR);
			cstmt.execute();
			rs = (OracleResultSet)cstmt.getObject(2);
			
			while (rs.next()){
				detalleOrdenPago = new DetalleOrdenPago();
				detalleOrdenPago.setItem(rs.getInt("Nu_Item"));
				detalleOrdenPago.setCodigoOrdenPago(rs.getString("Co_OrdenPago"));
				detalleOrdenPago.setDetalle(rs.getString("NO_Detalle"));
				detalleOrdenPago.setCantidad(rs.getInt("Ss_Cantidad"));
				detalleOrdenPago.setMonto(rs.getDouble("Ss_MontoItem"));
				detalleOrdenPago.setEstado(rs.getString("Co_Estado"));
				detalleOrdenPago.setFecha(rs.getDate("Fe_FechaEmision"));

				listaDetalleOrdenPago.add(detalleOrdenPago);
			}
			
    	}
    	catch(Exception e){
    		throw e;
    	}
    	finally {
    		DataAccessObjetc.close(null,cstmt,rs);
		}
    	
    	return listaDetalleOrdenPago;
    }

}
